"""alter_json_not_null

Revision ID: bd92923c218f
Revises: 5da28f6facb3
Create Date: 2023-03-02 14:04:16.492133

"""

import sqlalchemy as sa
from alembic import op
from sqlalchemy import select
from sqlalchemy.orm import Session
from sqlalchemy.ext.automap import automap_base

# revision identifiers, used by Alembic.
revision = "bd92923c218f"
down_revision = "5da28f6facb3"
branch_labels = None
depends_on = None


def set_default_value():
    Base = automap_base()
    Base.prepare(autoload_with=op.get_bind())
    Subscribe = Base.classes.nonebot_bison_subscribe
    with Session(op.get_bind()) as session:
        select_statement = select(Subscribe)
        results = session.scalars(select_statement)
        for subscribe in results:
            if subscribe.categories is None:
                subscribe.categories = []
            if subscribe.tags is None:
                subscribe.tags = []
        session.commit()


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    set_default_value()
    with op.batch_alter_table("nonebot_bison_subscribe", schema=None) as batch_op:
        batch_op.alter_column("categories", existing_type=sa.JSON(), nullable=False)
        batch_op.alter_column("tags", existing_type=sa.JSON(), nullable=False)

    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table("nonebot_bison_subscribe", schema=None) as batch_op:
        batch_op.alter_column("tags", existing_type=sa.JSON(), nullable=True)
        batch_op.alter_column("categories", existing_type=sa.JSON(), nullable=True)

    # ### end Alembic commands ###
